package com.um.info.service.impl;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.cs.framework.common.util.CommonUtils;
import com.cs.framework.jdbc.common.dao.CommonDao;
import com.um.info.dto.UmMenuAccessSaveDto;
import com.um.info.dto.base.UmMenuAccessDto;
import com.um.info.service.UmMenuAccessService;

/**
 * 菜单权限
 * 
 * @author hedongzhou
 * 
 */
@Service("umMenuAccessService")
public class UmMenuAccessImpl implements UmMenuAccessService {

	@Resource
	private CommonDao commonDao;

	/**
	 * 查询菜单权限
	 * 
	 * @param umMenuAccessDto
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public <T extends UmMenuAccessDto> T get(T umMenuAccessDto) {
		return (T) commonDao.selectOne("UmMenuAccess.query", umMenuAccessDto, umMenuAccessDto.getClass());
	}

	/**
	 * 查询菜单权限列表
	 * 
	 * @param umMenuAccessDto
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public <T extends UmMenuAccessDto> List<T> query(T umMenuAccessDto) {
		return (List<T>) commonDao.selectList("UmMenuAccess.query", umMenuAccessDto, umMenuAccessDto,
				umMenuAccessDto.getClass());
	}

	/**
	 * 保存菜单权限
	 * 
	 * @param umMenuAccessDto
	 * @return
	 */
	public UmMenuAccessDto save(UmMenuAccessDto umMenuAccessDto) {
		UmMenuAccessDto entity = get(umMenuAccessDto);

		if (entity == null) {
			return commonDao.save(umMenuAccessDto);
		} else {
			entity.setValid("Y");
			return commonDao.update(entity);
		}
	}

	/**
	 * 失效用户下的所有菜单权限
	 * 
	 * @param userId
	 *            用户名
	 */
	@Transactional
	public int invalid(String userId) {
		return commonDao.update("UmMenuAccess.invalid", userId);
	}

	/**
	 * 保存菜单权限
	 * 
	 * @param umMenuAccessSaveDto
	 * @return
	 */
	public void save(UmMenuAccessSaveDto umMenuAccessSaveDto) {
		String userId = umMenuAccessSaveDto.getUserId();
		String[] menu = umMenuAccessSaveDto.getMenu();

		CommonUtils.throwNull(userId, "用户名");
		CommonUtils.throwNull(menu, "菜单ID");

		invalid(userId);

		for (String menuId : menu) {
			UmMenuAccessDto umMenuAccessDto = new UmMenuAccessDto();
			umMenuAccessDto.setUserId(userId);
			umMenuAccessDto.setMenuId(menuId);
			save(umMenuAccessDto);
		}
	}

}
